/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol;

import entidad.Persona;
import entidad.Usuario;
import hero.interfaces.ProjectSession;
import hero.interfaces.UserSession;
import hero.util.HeroException;
import java.io.IOException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;

/**
 *
 * @author Administrador
 */
public class CTRL_Base {

    protected Logica logica;
    protected ProjectSession prjSession;
    protected UserSession usrSession;
    protected FacesContext facesContext;
    protected ExternalContext externalContext;
    protected HttpSession session;
    protected Usuario usuario;
    protected Persona personaAutenticada;

    
    public CTRL_Base(FacesContext facesContext) {
        try {
            logica = new Logica();
            usrSession = logica.getUserSession();
            prjSession = logica.getProjectSession();
            this.externalContext = facesContext.getExternalContext();
            this.facesContext = facesContext;
            session = (HttpSession) externalContext.getSession(false);
            usuario = (Usuario) session.getAttribute(AuthenticationPhaseListener.USER_SESSION_KEY);
            personaAutenticada = logica.leerPersonaPorUsuario(usuario.getUsuario());
        } catch (SQLException ex) {
            Logger.getLogger(CTRL_Base.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void redireccionar(String url) {
        try {
            HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
            response.sendRedirect(url);
            facesContext.responseComplete();
         } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void addCookieMensaje(String mensaje, String mensaje2) {
        Cookie cookieMensaje, cookieMensaje2;
        cookieMensaje = new Cookie("mensaje", mensaje);
        if (mensaje2 == null) {
            cookieMensaje2 = new Cookie("mensaje2", "");
        } else {
            cookieMensaje2 = new Cookie("mensaje2", mensaje2);
        }
        cookieMensaje.setMaxAge(-1);
        cookieMensaje2.setMaxAge(-1);
        cookieMensaje.setPath("/WA_SolicitudesFIEC/faces/general/");
        cookieMensaje2.setPath("/WA_SolicitudesFIEC/faces/general/");
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        response.addCookie(cookieMensaje);
        response.addCookie(cookieMensaje2);

    }

      public void addCookieMensajeError(String mensaje, String mensaje2) {
        Cookie cookieMensaje, cookieMensaje2, cookieTipo;
        cookieMensaje = new Cookie("mensaje", mensaje);
        if (mensaje2 == null) {
            cookieMensaje2 = new Cookie("mensaje2", "");
        } else {
            cookieMensaje2 = new Cookie("mensaje2", mensaje2);
        }
        cookieTipo = new Cookie("tipo", "error");
        cookieMensaje.setMaxAge(-1);
        cookieMensaje2.setMaxAge(-1);
        cookieTipo.setMaxAge(-1);
        cookieMensaje.setPath("/WA_SolicitudesFIEC/faces/general/");
        cookieMensaje2.setPath("/WA_SolicitudesFIEC/faces/general/");
        cookieTipo.setPath("/WA_SolicitudesFIEC/faces/general/");

        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        response.addCookie(cookieMensaje);
        response.addCookie(cookieMensaje2);
        response.addCookie(cookieTipo);

    }

    public void inicializarInstancia(String nombreInstancia) throws HeroException, RemoteException, Exception {
        if ((usrSession == null)) {
            throw new Exception("UserSession no pudo ser inicializado");
        }
        if ((prjSession == null)) {
            throw new Exception("ProjectSession no pudo ser inicializado");
        }
        if (nombreInstancia == null) {
            throw new Exception("El nombre de la instancia no fue especificado");
        }
        usrSession.getModelInstancesTodoList(nombreInstancia);
        prjSession.initProject(nombreInstancia);
    }
}
